package y2015.date0912pm.SAX解析;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 解析xml并按照原格式打印
 * date：9月14日pm
 */
public class SaxHandlerExample2 extends DefaultHandler {

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
//		System.out.println(ch);
        // 数组ch会从根元素开始读取到换行符格式，所以，不使用println（）；
        System.out.print(new String(ch, start, length));
        super.characters(ch, start, length);
    }

    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        System.out.print("</" + qName + ">");
        super.endElement(uri, localName, qName);
    }

    @Override
    public void startDocument() throws SAXException {
        // 分号是特殊符号，使用反斜杠符号转义
        System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        super.startDocument();
    }

    /*	uri - 名称空间 URI，如果元素没有任何名称空间 URI，或者没有正在执行名称空间处理，则为空字符串。
        localName - 本地名称（不带前缀），如果没有正在执行名称空间处理，则为空字符串。
        qName - 限定的名称（带有前缀），如果限定的名称不可用，则为空字符串。
        attributes - 附加到元素的属性。如果没有属性，则它将是空的 Attributes 对象。
    */
    @Override
    public void startElement(String uri, String localName, String qName,
                             Attributes attributes) throws SAXException {
        System.out.print("<");
        System.out.print(qName);
        if (attributes != null) {
            for (int i = 0; i < attributes.getLength(); i++) {
                System.out.print(" " + attributes.getQName(i) + "=\"" +
                        attributes.getValue(i) + "\"");
            }
            System.out.print(">");
        }
        super.startElement(uri, localName, qName, attributes);
    }

}

